//package com.filldream.fastboot.base;
//
//
//import cn.hutool.core.date.DateUtil;
//import cn.hutool.core.io.FileUtil;
//import cn.hutool.core.util.ZipUtil;
//import com.baomidou.mybatisplus.generator.AutoGenerator;
//import com.baomidou.mybatisplus.generator.config.*;
//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
//import com.filldream.fastboot.base.request.pc.database.DownCodeSTO;
//import com.filldream.fastboot.common.util.FileIOUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.commons.lang3.StringUtils;
//import javax.servlet.ServletOutputStream;
//import javax.servlet.http.HttpServletResponse;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.Date;
//
///**
// * @author RickSun
// * @Description Java代码生成器
// **/
//@Slf4j
//public class DownLoadCodeUtil {
//
//    /**
//     * 1、若有多数据源请注意修改配置和包名
//     * 2、默认数据源生成的东西都放在entity、mapper、service下，而其他数据源的数据则会在默认情况下新建数据源目录
//     */
//
//    //mysql配置
//    private static  String  mysqlUrl = "jdbc:mysql://127.0.0.1:3306/iamhere?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8";
//    private static  String mysqlDriverName = "com.mysql.cj.jdbc.Driver";
//    private static  String mysqlUserName = "root";
//    private static  String mysqlPassword = "123456.";
//
//    private static String dirUrl = "/root/codeTemp";
//    {
//        boolean windows = System.getProperty("os.name").toLowerCase().contains("windows");
//        if(windows){
//            dirUrl = "D:/work7/temp";
//        }
//    }
//
//    //包名配置
//    private static String basePackage = dirUrl+"/iamhere-base";
//    private static String baseUrl = "com.filldream.iamhere";
//    private static String baseParentName = baseUrl +".base";
//    private static String dbNum = "";  //数据源，默认数据源填空
//    private static String author = "RickSun";
//    private static String tableNames = "";  //表名
//    private static Boolean isOverWriteXml = true; //是否覆盖xml
//    private static  Boolean isOverWriteOther = true; //是否覆盖非xml
//
//    public static void gen(HttpServletResponse response, DownCodeSTO downCodeSTO,String t) throws IOException {
//
//        downCodeSTO.check();
//        log.info("t=>" + t);
//
//        //配置
//        baseUrl = downCodeSTO.getPackageName();
//        tableNames = t;
//        isOverWriteXml = downCodeSTO.getIsOverWriteXml();
//        isOverWriteOther = downCodeSTO.getIsOverWriteOther();
//        dbNum = downCodeSTO.getDbNum();
//        author = downCodeSTO.getAuthor();
//        baseParentName = baseUrl +".base";
//
//        //获取不生成xml的代码生成器
//        AutoGenerator mpg = getAutoGeneratorByNoXml("/src/main/java/",isOverWriteOther);
//        //获取生成xml的代码生成器
//        String xmlPath = StringUtils.isNotBlank(dbNum) ? "/src/main/resources/mapper/" + dbNum : "/src/main/resources";
//        AutoGenerator mpgXml = getAutoGeneratorByXml(xmlPath,isOverWriteXml);
//        // 策略配置
//        StrategyConfig strategy = new StrategyConfig();
//        strategy.setNaming(NamingStrategy.underline_to_camel);
//        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//        strategy.setEntityLombokModel(true);
//        strategy.setRestControllerStyle(true);
//        strategy.setDbColumnUnderline(true);
//        strategy.setInclude(tableNames.split(","));
//        strategy.setControllerMappingHyphenStyle(true);
//        mpg.setStrategy(strategy);
//        mpg.execute();
//
//        mpgXml.setStrategy(strategy);
//        mpgXml.execute();
//
//
//        //压缩
//        String zipFile = t.replaceAll(",","And") + "_v_code_"+ DateUtil.format(new Date(),"yyyyMMddHHmmss")  +".zip";
//        String downLoadFile = File.separatorChar + "zipTemp" + File.separatorChar + zipFile;
//        ZipUtil.zip(basePackage, downLoadFile);
//
//        File fileZip = FileUtil.file(downLoadFile);
//
//        response.setHeader("fileName", fileZip.getName());
//        response.setHeader("Content-Disposition", "attachment; filename=" + fileZip.getName());
//        response.setContentType("application/octet-stream");
//        response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");
//
//        ServletOutputStream out = response.getOutputStream();
//        InputStream inputStream = new FileInputStream(downLoadFile);
//        byte[] buffer = new byte[1024];
//        int i = -1;
//        while ((i = inputStream.read(buffer)) != -1) {
//            out.write(buffer, 0, i);
//        }
//        out.flush();
//        inputStream.close();
//        // 终止后删除临时文件
//        fileZip.deleteOnExit();
//        FileIOUtil.deleteFiles(basePackage);
//    }
//
//    /**
//     * 数据源配置
//     * @return
//     */
//    private static DataSourceConfig getDataSourceConfig(){
//        DataSourceConfig dsc = new DataSourceConfig();
//        dsc.setUrl(mysqlUrl);
//        dsc.setDriverName(mysqlDriverName);
//        dsc.setUsername(mysqlUserName);
//        dsc.setPassword(mysqlPassword);
//        return dsc;
//    }
//
//    /**
//     * 全局配置
//     * @return
//     */
//    private static GlobalConfig globalConfig(String outputDir,Boolean isOverwrite){
//        // 全局配置
//        GlobalConfig gc = new GlobalConfig();
//        final String projectPath =  basePackage;
//        gc.setOutputDir(projectPath + outputDir);
//        gc.setAuthor(author);
//        // 不需要ActiveRecord特性的请改为false
//        gc.setActiveRecord(false);
//        // XML 二级缓存
//        gc.setEnableCache(false);
//        // XML ResultMap
//        gc.setBaseResultMap(true);
//        // XML columList
//        gc.setBaseColumnList(true);
//
//        gc.setOpen(false);
//        gc.setMapperName("%sMapper");
//        gc.setXmlName("%sMapper");
//
//        gc.setFileOverride(isOverwrite);
////        gc.setS //实体属性 Swagger2 注解
//        return gc;
//    }
//
//    private static AutoGenerator getAutoGeneratorByNoXml(String outputDir,Boolean isOverWrite){
//        AutoGenerator mpg = new AutoGenerator();
//        // 全局配置
//        mpg.setGlobalConfig(globalConfig(outputDir,isOverWrite));
//        //数据源配置
//        mpg.setDataSource(getDataSourceConfig());
//
//        //配置不生成controller，service
//        TemplateConfig templateConfig = new TemplateConfig();
//        templateConfig.setController(null);
//        templateConfig.setService(null);
//        templateConfig.setServiceImpl(null);
//        templateConfig.setXml(null);
//        mpg.setTemplate(templateConfig);
//
//        //TODO 修改本地父包
//        final PackageConfig pc = new PackageConfig();
//        pc.setParent(baseParentName);
//        pc.setMapper(StringUtils.isNotBlank(dbNum) ? "mapper." + dbNum  : "mapper");
//        pc.setEntity(StringUtils.isNotBlank(dbNum) ? "entity." + dbNum : "entity");
//        mpg.setPackageInfo(pc);
//        return mpg;
//    }
//
//    /**
//     * 生成xml
//     * @param outputDir
//     * @return
//     */
//    private static AutoGenerator getAutoGeneratorByXml(String outputDir,Boolean isOverWrite){
//        AutoGenerator mpg = new AutoGenerator();
//        // 全局配置
//        mpg.setGlobalConfig(globalConfig(outputDir,isOverWrite));
//        //数据源配置
//        mpg.setDataSource(getDataSourceConfig());
//
//        //配置不生成controller，service
//        TemplateConfig templateConfig = new TemplateConfig();
//        templateConfig.setController(null);
//        templateConfig.setService(null);
//        templateConfig.setServiceImpl(null);
//        templateConfig.setEntity(null);
//        templateConfig.setMapper(null);
//        mpg.setTemplate(templateConfig);
//
//        //TODO 修改本地父包
//        // 包配置
//        final PackageConfig pc = new PackageConfig();
//        pc.setParent("");
//        pc.setXml("mapper");
//        String tempName = StringUtils.isNotBlank(dbNum) ? baseParentName + ".entity." + dbNum : baseParentName + ".entity";
//        String tempName2 = StringUtils.isNotBlank(dbNum) ? baseParentName + ".mapper." + dbNum : baseParentName + ".mapper";
//        pc.setEntity(tempName);
//        pc.setMapper(tempName2);
//        mpg.setPackageInfo(pc);
//        return mpg;
//    }
//
//
//}
